package com.jzo2o.orders.manager.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.jzo2o.api.orders.dto.request.OrderCancelReqDTO;
import com.jzo2o.api.trade.dto.response.NativePayResDTO;
import com.jzo2o.orders.base.model.domain.Orders;
import com.jzo2o.orders.manager.model.dto.request.OrdersPayReqDTO;
import com.jzo2o.orders.manager.model.dto.request.PlaceOrderReqDTO;
import com.jzo2o.orders.manager.model.dto.response.OrdersPayResDTO;
import com.jzo2o.orders.manager.model.dto.response.PlaceOrderResDTO;

import java.time.LocalDateTime;

/**
 * <p>
 * 下单服务类
 * </p>
 *
 * @author itcast
 * @since 2023-07-10
 */
public interface IOrdersCreateService extends IService<Orders> {
    /**
     * 下单
     *
     * @param placeOrderReqDTO 下单请求参数
     * @return 下单结果
     */
    public PlaceOrderResDTO placeOrder(PlaceOrderReqDTO placeOrderReqDTO);
    
    
    /**
     * 添加订单
     *
     * @param orders 订单信息
     */
    public void add(Orders orders);
    
    /**
     * 订单支付
     *
     * @param id                订单id
     * @param ordersPayReqDTO 订单支付参数
     * @return 订单支付结果
     */
    OrdersPayResDTO payOrder(Long id, OrdersPayReqDTO ordersPayReqDTO);
    
    /**
     * 对接支付接口
     *
     * @param orderId 订单id
     * @param nativePayResDTO 对接支付参数
     */
    void updateOrders(Long orderId, NativePayResDTO nativePayResDTO);
    
    /**
     * 订单支付结果查询
     *
     * @param id               订单id
     * @return 支付结果
     */
    OrdersPayResDTO payResult(Long id);
    
    /**
     * 支付成功,修改订单状态
     *
     * @param id               订单id
     * @param transactionId    支付交易id
     * @param paySuccessTime   支付成功时间
     */
    void paySuccess(Long id, String transactionId, LocalDateTime paySuccessTime);
    
    /**
     * 订单取消
     *
     * @param
     */
    void cancelOrder(OrderCancelReqDTO orderCancelReqDTO);
    
    
    /**
     * 取消未支付订单
     * @param orderId
     * @param cancelReason
     */
    void cancelOrderByNoPay(Long orderId, String cancelReason,boolean isAutoCancel);
}
